const Koa = require('koa');
const koaStaticCache = require('koa-static-cache');
const KoaRouter = require('koa-router');
const fs = require('fs')

const app = new Koa();

app.use(koaStaticCache({
    prefix: '/public',
    dir: './public',
    gzip: true,
    dynamic: true
}))

const router = new KoaRouter();

router.get('/users', async (ctx, next) => {
    // 获取到数据以后存储到 users
    let users = JSON.parse(fs.readFileSync('./data/users.json').toString());

    // 判断一下当前客户端请求之前的数据与当前服务端的数据是否有不同，如果没有变化，我们可以进行等待，直到数据发生了变化，才返回这次请求

    // 1、 获取当前客户端传入的n
    let n = ctx.request.query.n || 0;

    // 2、获取当前数据的条数
    console.log(users.length, n)
    while(users.length == n) {
        // 如果 users.length == n，说明数据没有变化，则休眠一秒中重新读取
        console.log('准备休息1秒钟')
        await sleep();
        users = JSON.parse(fs.readFileSync('./data/users.json').toString());
    }


    ctx.set('Content-Type', 'text/event-stream');
    // ctx.body = JSON.stringify(users);
    ctx.body = `event: newUsers\ndata: {"users": ${JSON.stringify(users)}}\n\n`;
})


app.use(router.routes());
app.listen(8888);


function sleep() {
    return new Promise((resolve => {
        setTimeout(resolve, 1000);
    }))
}
